﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
//using System.Web;
using System.Text.RegularExpressions;
//using System.Web.UI.WebControls;
//using System.Web;
//using System.Web.UI;
using System.Windows.Forms;

/// <summary>
/// Summary description for clUtil
/// </summary>
namespace IS.Comm
{

    /// <summary>
    /// Thực hiện các hàm cơ bản
    /// </summary>
    /// 
    public class CommonLib
    {
        public CommonLib()
        {
        }
        #region check and convert for datatype
        /// <summary>
        /// Kiểm tra ô nhập vào là ngày tháng hay không,
        /// </summary>
        /// <param name="sd">Biểu thức được coi là ngày tháng</param>
        /// <returns>0 là ngày thắng, ngược lại là không đúng định dạng</returns>
        public int checkDate(string sd)
        {
            char[] sp = { '/', '-', '.', ' ', ':' };
            int y, m, d;
            string[] a = sd.Split(sp);
            if (a.Length != 3)
            {
                return -1;
            }
            int.TryParse(a[0], out d);
            int.TryParse(a[1], out m);
            int.TryParse(a[2], out y);
            if (d < 0 || d > 31)
            {
                return -2;
            }
            if (m < 0 || m > 12)
            {
                return -3;
            }
            if (y < 1900 || m > 3000)
            {
                return -4;
            }
            return 0;
        }
        /// <summary>
        /// Kiểm tra giá trị nhập vào có là thời gian hay không
        /// </summary>
        /// <param name="sd">Biểu thức cần kiểm tra</param>
        /// <returns>0 nếu là đúng</returns>
        public int checkTime(string sd)
        {
            char[] sp = { ':' };
            int h, m;
            string[] a = sd.Split(sp);
            if (a.Length != 2)
            {
                return -1;
            }
            int.TryParse(a[0], out h);
            int.TryParse(a[1], out m);
            if (h < 0 || h > 24)
            {
                return -2;
            }
            if (m < 0 || m > 60)
            {
                return -3;
            }
            return 0;
        }
        /// <summary>
        /// Lấy giá trị date từ ô text, nếu không đúng sẽ nhận giá trị là def
        /// </summary>
        /// <param name="sd">Chuỗi cần chuyển đổi sang ngày tháng</param>
        /// <param name="def">Giá trị mặc định khi không đúng</param>
        /// <returns>Giá trị ngày tháng</returns>
        public object getDate4Text(string sd, object def)
        {
            char[] sp = { '/', '-', '.', ' ', ':' };
            int y, m, d;
            string[] a = sd.Split(sp);
            if (a.Length != 3)
            {
                return null;
            }
            int.TryParse(a[0], out d);
            int.TryParse(a[1], out m);
            int.TryParse(a[2], out y);
            return new DateTime(y, m, d, 0, 0, 0);
        }
        /// <summary>
        /// Lấy giá trị trạng thái của ô checkbox
        /// </summary>
        /// <param name="c">Ô check box</param>
        /// <returns>Giá trị trạng thái</returns>
        //public short getCheck(CheckBox c)
        //{
        //    if (c.Checked)
        //        return 1;
        //    return 0;
        //}
        /// <summary>
        /// Lấy giá trị đang được chọn của ô combo box - dropdownlist
        /// </summary>
        /// <param name="dr">Ô combo box</param>
        /// <param name="value">Giá trị mặc định nếu chưa chọn</param>
        /// <returns>Giá trị theo mô tả</returns>
        //public string getCombo(DropDownList dr, string value)
        //{
        //    if (dr.SelectedIndex < 0)
        //    {
        //        return value;
        //    }
        //    return dr.SelectedValue.ToString();
        //}
        /// <summary>
        ///Chuyển từ chuỗi sang ngày tháng, nếu không đúng sẽ chọn là ngày tháng hiện tại
        ///
        /// </summary>
        /// <param name="sd">Chuỗi cần chuyển</param>
        /// <returns>Ngày tháng</returns>
        public DateTime convert2date(string sd)
        {
            char[] sp = { '/', '-', '.', ' ', ':' };
            int y, m, d;
            string[] a = sd.Split(sp);
            if (a.Length != 3)
            {
                return DateTime.Now;
            }
            int.TryParse(a[0], out d);
            int.TryParse(a[1], out m);
            int.TryParse(a[2], out y);
            return new DateTime(y, m, d, 0, 0, 0);
        }
        /// <summary>
        /// Chuyển chuỗi định dạng sang ngày tháng giờ phút
        /// </summary>
        /// <param name="sd">Chuỗi định dạng</param>
        /// <returns>Giá trị nhập, nếu không mặc định tại thời điểm hiện tại</returns>
        public DateTime convert2datetime(string sd)
        {
            char[] sp = { '/', '-', '.', ' ', ':' };
            int y, m, d, h, mi;
            string[] a = sd.Split(sp);
            if (a.Length != 5 && a.Length != 6)
            {
                return DateTime.Now;
            }
            int.TryParse(a[0], out d);
            int.TryParse(a[1], out m);
            int.TryParse(a[2], out y);
            int.TryParse(a[3], out h);
            int.TryParse(a[4], out mi);
            return new DateTime(y, m, d, h, mi, 0);
        }
        /// <summary>
        /// Kiểm tra xem đúng ngày giờ phút
        /// </summary>
        /// <param name="sd">Chuỗi cần kiểm tra</param>
        /// <returns>0 thành công</returns>
        public int checkDatetime(string sd)
        {
            char[] sp = { '/', '-', '.', ' ', ':' };
            int y, m, d, h, mi;
            string[] a = sd.Split(sp);
            if (a.Length != 5 && a.Length != 6)
            {
                return -1;
            }
            int.TryParse(a[0], out d);
            int.TryParse(a[1], out m);
            int.TryParse(a[2], out y);
            int.TryParse(a[3], out h);
            int.TryParse(a[4], out mi);
            if (d < 0 || d > 31)
            {
                return -2;
            }
            if (m < 0 || m > 12)
            {
                return -3;
            }
            if (y < 1900 || m > 3000)
            {
                return -4;
            }
            if (h < 0 || h > 24)
            {
                return -5;
            }
            if (mi < 0 || mi > 60)
            {
                return -5;
            }
            return 0;
        }
        /// <summary>
        /// Kiểm tra xem là số nguyên
        /// </summary>
        /// <param name="n">Cần kiểm tra</param>
        /// <returns>0 đúng là kiểu nguyên</returns>
        public int checkInt(string n)
        {
            if (n.Contains(","))
            {
                n = n.Replace(",", "");
            }
            int a;
            if (!int.TryParse(n, out a))
            {
                return -1;
            }
            return 0;
        }
        /// <summary>
        /// Kiểm tra xem là kiểu decimal
        /// </summary>
        /// <param name="n">Cần kiểm tra</param>
        /// <returns>0 nếu là đúng</returns>
        public int checkDecimal(string n)
        {
            if (n.Contains(","))
            {
                n = n.Replace(",", "");
            }
            decimal a;
            if (!decimal.TryParse(n, out a))
            {
                return -1;
            }
            return 0;
        }
        /// <summary>
        /// Chuyển đổi chuỗi sang số nguyên
        /// </summary>
        /// <param name="n">Chuỗi cần chuyển</param>
        /// <param name="def">Giá trị mặc định nếu chuyển sai</param>
        /// <returns>Giá trị chuyển đổi được</returns>
        public int convert2Int(string n, int def)
        {
            if (n.Contains(","))
            {
                n = n.Replace(",", "");
            }
            int a;
            if (!int.TryParse(n, out a))
            {
                return def;
            }
            return a;
        }
        /// <summary>
        /// Chuyển định dạng số nguyên
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        public string formatNumber(int n)
        {
            return n.ToString("###,#");
        }
        /// <summary>
        /// Chuyển định dạng số thập phân
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        public string formatNumber(decimal n)
        {
            return n.ToString("###,#.#");
        }
        /// <summary>
        /// Chuyển sang keieru decimal với giá trị mặc định là def
        /// </summary>
        /// <param name="n"></param>
        /// <param name="def"></param>
        /// <returns></returns>
        public decimal convert2Decimal(string n, decimal def)
        {
            if (n.Contains(","))
            {
                n = n.Replace(",", "");
            }
            decimal a;
            if (!decimal.TryParse(n, out a))
            {
                return def;
            }
            return a;

        }
        /// <summary>
        /// Chuyển sang kiểu double với mặc định là def
        /// </summary>
        /// <param name="n"></param>
        /// <param name="def"></param>
        /// <returns></returns>
        public double convert2Double(string n, double def)
        {
            if (n.Contains(","))
            {
                n = n.Replace(",", "");
            }
            double a;
            if (!double.TryParse(n, out a))
            {
                return def;
            }
            return a;

        }
        #endregion
        ///<summary>
        /// Chuyển từ ngày tháng năm sang định dạng ngày tháng của hệ thống
        /// </summary>
        public string date2String(DateTime dt)
        {
            if (dt == null)
                return "";
            if (dt == System.Data.SqlTypes.SqlDateTime.MinValue)
            {
                return "";
            }
            //        if(dt.
            return dt.ToString("dd/MM/yyyy");
        }
        /// <summary>
        /// Lấy giá trị từ URL với giá trị mặc định
        /// </summary>
        /// <param name="p">Trang cần lấy - this</param>
        /// <param name="v">Tên biến cần lấy</param>
        /// <param name="de">Giá trị mặc định nếu chưa lấy được</param>
        /// <returns>Giá trị</returns>
        //public string getValue(Page p, string v, string de)
        //{
        //    string ret = de;
        //    ret = p.Request.QueryString.Get(v);
        //    if (ret == null)
        //    {
        //        ret = de;
        //    }
        //    return ret;
        //}
        #region set for commond object
        /// <summary>
        /// Đặt cơ sở dữ liệu vào combobox
        /// </summary>
        /// <param name="obj">Đối tượng là combo box</param>
        /// <param name="tb">Dataview của bảng dữ liệu</param>
        /// <param name="valueField">Tên trường đưa vào datafield</param>
        /// <param name="dispField">Tên trường hiển thị của combo box</param>
        /// <param name="firstValue">Giá trị của giá trị đầu tiên</param>
        /// <param name="firstText">Văn bản hiện thị của giá trị đầu tiên</param>
        //public void setComboBox(DropDownList obj, DataView tb, string valueField, string dispField, string firstValue, string firstText)
        //{
        //    obj.DataSource = tb;
        //    obj.DataValueField = valueField;
        //    //            cboDegree.DataMember = valueField;
        //    obj.DataTextField = dispField;
        //    obj.DataBind();
        //    if (firstText != "")
        //    {
        //        ListItem li = new ListItem();
        //        li.Value = firstValue;
        //        li.Text = firstText;
        //        obj.Items.Insert(0, li);
        //    }
        //}
        /// <summary>
        /// Chọn giá trị cần đạt đến của combo box
        /// </summary>
        /// <param name="obj">Đối tượng</param>
        /// <param name="valueCode">Giá trị cần đặt</param>
        //public void setComboDefault(DropDownList obj, string valueCode)
        //{
        //    if (valueCode != "" && valueCode != null)
        //    {
        //        for (int i = 0; i < obj.Items.Count; i++)
        //        {
        //            if (obj.Items[i].Value.ToUpper() == valueCode.ToUpper())
        //            {
        //                obj.SelectedIndex = i;
        //            }
        //        }

        //    }
        //    else
        //    {
        //        if (obj.Items.Count > 0)
        //        {
        //            obj.SelectedIndex = 0;
        //        }
        //    }
        //}
        /// <summary>
        /// Đặt cơ sở dữ liệu để làm danh sách các checkbox
        /// </summary>
        /// <param name="cbl">Đối tượng</param>
        /// <param name="dt">Dataview đối tượng chứa dữ liệu</param>
        /// <param name="valueField">Trường dữ liệu</param>
        /// <param name="dispField">Trường hiển thị</param>
        //public void setCheckList(CheckBoxList cbl, DataView dt, string valueField, string dispField)
        //{
        //    cbl.DataSource = dt;
        //    cbl.DataTextField = dispField;
        //    cbl.DataValueField = valueField;
        //    cbl.DataBind();
        //}
        /// <summary>
        /// Đặt trạng thái của checkbox theo điều kiện
        /// </summary>
        /// <param name="cbl">Đối tượng </param>
        /// <param name="dt">Bảng dữ liệu</param>
        /// <param name="field">Trường so sánh</param>
        //public void setCheckListChecked(CheckBoxList cbl, DataTable dt, string field)
        //{
        //    string code;
        //    foreach (DataRow dr in dt.Rows)
        //    {
        //        code = dr[field].ToString();
        //        ListItem li = cbl.Items.FindByValue(code);
        //        if (li != null)
        //        {
        //            li.Selected = true;
        //        }
        //    }
        //}

        #endregion
        public string getShow(string data)
        {
            return data.Replace("\n", "<br/>");
        }
        public static string StripHTML(string str)
        {
            if (str != null)
            {
                //string output="";
                //string pattern = @"<\s*\w*\s*style.*?>";
                //Regex rgx = new Regex(pattern);
                //foreach (Match match in rgx.Matches(str))
                //    output += match.Value + " ";
                //return output;
                return System.Text.RegularExpressions.Regex.Replace(str, @"<(.|\n)*?>", string.Empty);
                //return System.Text.RegularExpressions.Regex.Match(str, @"<\s*\/?\s*span\s*.*?>",System.Text.RegularExpressions.RegexOptions.CultureInvariant).Value;

            }
            else
                return str;
        }
        public static string Substring(string stringIn, int count)
        {
            stringIn = stringIn.Trim();
            string[] arr = stringIn.Split(' ');
            string stringOut = "";
            int totalWord = arr.Length;
            if (totalWord <= count)
                stringOut = stringIn;
            else
            {
                for (int i = 0; i < count; i++)
                {
                    stringOut += " " + arr[i];
                }
                stringOut += "...";
            }
            return stringOut;
        }
        public static string bodau(string input)
        {
            string[] VietnameseSigns = new string[]    {
        "aAeEoOuUiIdDyY","áàạảãâấầậẩẫăắằặẳẵ","ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ","éèẹẻẽêếềệểễ","ÉÈẸẺẼÊẾỀỆỂỄ", 
        "óòọỏõôốồộổỗơớờợởỡ","ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ","úùụủũưứừựửữ","ÚÙỤỦŨƯỨỪỰỬỮ","íìịỉĩ",
         "ÍÌỊỈĨ","đ","Đ","ýỳỵỷỹ","ÝỲỴỶỸ"};
            for (int i = 1; i < VietnameseSigns.Length; i++)
            {
                for (int j = 0; j < VietnameseSigns[i].Length; j++)
                    input = input.Replace(VietnameseSigns[i][j], VietnameseSigns[0][i - 1]);
            }
            return input;
        }
        public static string genFileName()
        {
            DateTime dt = new DateTime(
                DateTime.Now.Year,
                DateTime.Now.Month,
                DateTime.Now.Day,
                DateTime.Now.Hour,
                DateTime.Now.Minute,
                DateTime.Now.Second);

            string s = String.Format("{0:yyyy MM dd HH mm ss}", dt);
            s = s.Replace(" ", "_");
            return s;
        }
        public static string showMessage(string message)
        {
            if (message != null)
            {
                message = message.Replace("\"", "'");
                message = message.Replace("\r", " ");
                message = message.Replace("\n", " ");
                return "<script language='javascript'> alert(\"" + message + "\"); </script>";
            }
            else
                return message;
        }
        #region phần lấy dữ liệu từ datarow
        /// <summary>
        /// Lấy dữ liệu từ trong một datarow, có kiểm tra null, sự tồn tại của trường, nếu null trả về giá trị mặc định
        /// </summary>
        /// <param name="dr">Hàng cần lấy dữ liệu</param>
        /// <param name="columName">Tên cột cần lấy dữ liệu</param>
        /// <param name="defaultValue">Giá trị mặc định trong trường hợp là null, hoặc không chuyển đổi được</param>
        /// <returns>Giá trị trong hàng và cột</returns>
        public int int4Row(DataRow dr, string columName, int defaultValue)
        {
            if (dr == null)
            {
                return defaultValue;
            }
            if (!dr.Table.Columns.Contains(columName))
            {
                return defaultValue;
            }
            if(dr[columName]==null)
            {
                return defaultValue;
            }

            return convert2Int(dr[columName].ToString(), defaultValue);
        }
        /// <summary>
        /// Lấy dữ liệu từ trong một datarow, có kiểm tra null, sự tồn tại của trường, nếu null trả về giá trị mặc định
        /// </summary>
        /// <param name="dr">Hàng cần lấy dữ liệu</param>
        /// <param name="columName">Tên cột cần lấy dữ liệu</param>
        /// <param name="defaultValue">Giá trị mặc định trong trường hợp là null, hoặc không chuyển đổi được</param>
        /// <returns>Giá trị trong hàng và cột</returns>
        public double double4Row(DataRow dr, string columName, double defaultValue)
        {
            if (dr == null)
            {
                return defaultValue;
            }
            if (!dr.Table.Columns.Contains(columName))
            {
                return defaultValue;
            }
            if(dr[columName]==null)
            {
                return defaultValue;
            }

            return convert2Double(dr[columName].ToString(), defaultValue);
        }
        /// <summary>
        /// Lấy dữ liệu từ trong một datarow, có kiểm tra null, sự tồn tại của trường, nếu null trả về giá trị mặc định
        /// </summary>
        /// <param name="dr">Hàng cần lấy dữ liệu</param>
        /// <param name="columName">Tên cột cần lấy dữ liệu</param>
        /// <param name="defaultValue">Giá trị mặc định trong trường hợp là null, hoặc không chuyển đổi được</param>
        /// <returns>Giá trị trong hàng và cột</returns>
        public decimal decimal4Row(DataRow dr, string columName, decimal defaultValue)
        {
            if (dr == null)
            {
                return defaultValue;
            }
            if (!dr.Table.Columns.Contains(columName))
            {
                return defaultValue;
            }
            if (dr[columName] == null)
            {
                return defaultValue;
            }

            return convert2Decimal(dr[columName].ToString(), defaultValue);
        }
        /// <summary>
        /// Lấy dữ liệu từ trong một datarow, có kiểm tra null, sự tồn tại của trường, nếu null trả về giá trị mặc định
        /// </summary>
        /// <param name="dr">Hàng cần lấy dữ liệu</param>
        /// <param name="columName">Tên cột cần lấy dữ liệu</param>
        /// <param name="defaultValue">Giá trị mặc định trong trường hợp là null, hoặc không chuyển đổi được</param>
        /// <returns>Giá trị trong hàng và cột</returns>
        public DateTime datetime4Row(DataRow dr, string columName, DateTime defaultValue)
        {
            if (dr == null)
            {
                return defaultValue;
            }
            if (!dr.Table.Columns.Contains(columName))
            {
                return defaultValue;
            }
            if (dr[columName] == null)
            {
                return defaultValue;
            }

            return (DateTime)dr[columName];
        }
        /// <summary>
        /// Lấy dữ liệu từ trong một datarow, có kiểm tra null, sự tồn tại của trường, nếu null trả về giá trị mặc định
        /// </summary>
        /// <param name="dr">Hàng cần lấy dữ liệu</param>
        /// <param name="columName">Tên cột cần lấy dữ liệu</param>
        /// <param name="defaultValue">Giá trị mặc định trong trường hợp là null, hoặc không chuyển đổi được</param>
        /// <returns>Giá trị trong hàng và cột</returns>
        public string string4Row(DataRow dr, string columName, string defaultValue)
        {
            if (dr == null)
            {
                return defaultValue;
            }
            if (!dr.Table.Columns.Contains(columName))
            {
                return defaultValue;
            }
            if (dr[columName] == null)
            {
                return defaultValue;
            }

            return dr[columName].ToString();
        }        
        #endregion
        //public static showMessage
        public static void resizeGrid(ref DataGridView dg)
        {
            int i, wpercent = 0, wtotal = 0;
            for (i = 0; i < dg.Columns.Count; i++)
            {
                wtotal += dg.Columns[i].Width;
            }
            if (wtotal == 0)
                wtotal = 1;
            wpercent = (dg.Width - 10);
            if (wpercent < 0)
                wpercent = 0;
            for (i = 0; i < dg.Columns.Count; i++)
            {
                dg.Columns[i].Width = dg.Columns[i].Width * wpercent / wtotal;
            }

        }
        public static int checkColumn(ref DataTable dt, string columName, int value)
        {
            foreach (DataRow dr in dt.Rows)
            {
                if (dr.RowState != DataRowState.Deleted)
                {
                    dr[columName] = value;
                }
            }
            return 0;
        }
        public static DateTime getSQLMinDate()
        {
            return new DateTime(1753, 1, 1);
        }
    }

}